
// --strictNullChecks可以切换到新的严格空检查模式中。
// 在严格空检查模式中，null和undefined值不再属于任何类型的值，
// 仅仅属于它们自己类型和any类型的值 （还有一个例外， undefined也能赋值给void）。
// 因此，尽管在常规类型检查模式下T和T | undefined被认为是相同的 （因为 undefined被认为是任何T的子类型），
// 但是在严格类型检查模式下它们是不同的， 并且仅仅 T | undefined允许有undefined值，T和T | null的关系同样如此。

// 使用--strictNullChecks参数进行编译的
/*
let x: number;
let y: number | undefined;
let z: number | null | undefined;
x = 1;  // 正确
y = 1;  // 正确
z = 1;  // 正确
x = undefined;  // 错误
y = undefined;  // 正确
z = undefined;  // 正确
x = null;  // 错误
y = null;  // 错误
z = null;  // 正确
x = y;  // 错误
x = z;  // 错误
y = x;  // 正确
y = z;  // 错误
z = x;  // 正确
z = y;  // 正确*/
